﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OBL1_DiseñoDeAplicaciones.Datos_de_Prueba;

namespace OBL1_DiseñoDeAplicaciones.ObjetosDeNegocio
{
    public class Empresa
    {
        private int iva = 22;
        private static Empresa instance;
        private string nombreEmpresa;
        private List<Proyecto> proyectos;
        private List<Cliente> clientes;

        public int Iva
        {
            get { return iva; }
            set { iva = value; }
        }

        private Empresa() {
            proyectos = new List<Proyecto>();
            clientes = new List<Cliente>();
            instance = null;
            nombreEmpresa = "Manejador de proyectos";
        }

        public static Empresa GetInstance()
        {
            if (instance == null)
            {
                instance = new Empresa();
            }
            return instance;
        }

        #region Properties

        public string NombreEmpresa
        {
            get { return nombreEmpresa; }
            set { nombreEmpresa = value; }
        }

        public List<Proyecto> Proyectos
        {
            get { return proyectos; }
            set { proyectos = value; }
        }

        public List<Cliente> Clientes
        {
            get { return clientes; }
            set { clientes = value; }
        }

        #endregion

        public void AgregarProyecto(string nombre, Cliente cliente, Tarea tarea) {
            proyectos.Add(new Proyecto(nombre, cliente, tarea));
        }

        public bool AgregarCliente(string nombre, string ruc, string direccion, bool esExcento)
        {
            bool retorno = false;
            Cliente c;
            if (esExcento) {
                c = new ClienteExento(nombre, ruc, direccion);
            }
            else{ 
                c = new ClienteIva(nombre, ruc, direccion);
            }

            if (!clientes.Contains(c))
            {
                clientes.Add(c);
                retorno = true;
            }
            return retorno; 
        }
    }
}
